#ifndef __WIZ_ALGEBRA_QUATERNION_HPP__SHANHAOBO_19800429__
#define __WIZ_ALGEBRA_QUATERNION_HPP__SHANHAOBO_19800429__

#include "./WizAlgebraQuaternionCore.hpp"

namespace Wiz
{
    namespace Quat
    {
        template<typename ElementT>
        struct Type : public ::Wiz::Quat::Core::Type<ElementT>
        {
            typedef ElementT                                tElement;
            typedef Type                                    tThis;
            typedef ::Wiz::Quat::Core::Type<tElement>       tSuper;


            WIZ_INLINE friend tThis operator*(tThisIn qt1, tThisIn qt2)
            {
                tThis q;
                return tSuper::Multiply(q, qt1, qt2);
            }
            WIZ_INLINE friend tThis operator*(tThisIn qt, const tElement& s)
            {
                tThis q;
                return tSuper::Multiply(q, qt, s);
            }
            WIZ_INLINE friend tThis operator*(const tElement& s, tThisIn qt)
            {
                tThis q;
                return tSuper::Multiply(q, qt, s);
            }

            template<class Matrix33T>
            WIZ_INLINE ::Wiz::Void::Type ToMatrix(Matrix33T& OutMat) const
            {
                tSuper::ToMatrix(OutMat, *this);
            }
        };
    } /// end of namespace Quat
} /// end of namespace Wiz

#endif /*__WIZ_ALGEBRA_QUATERNION_HPP__SHANHAOBO_19800429__*/
